The SendInput function synthesizes keystrokes, mouse motions, and button clicks to the currently active window
/// <summary>
/// Synthesizes keystrokes, mouse motions, and button clicks.
/// </summary>
[DllImport("user32.dll")]
internal static extern uint SendInput (uint nInputs,
[MarshalAs(UnmanagedType.LPArray), In] INPUT[] pInputs,
int cbSize);
<DllImport("user32.dll", SetLastError:=True)> Private Shared Function SendInput(ByVal cInputs As Integer, ByRef pInputs As MOUSEINPUT, ByVal cbSize As Integer) As Integer
End Function
Private Declare Function SendInput Lib "user32.dll" (ByVal cInputs As Integer, ByRef pInputs As INPUT, ByVal cbSize As Integer) As Integer
Please add some!
var pInputs = new[]
{
new StructLib.INPUT()
{
type = EnumLib.INPUT_TYPE.INPUT_KEYBOARD,
ki = new StructLib.KEYBDINPUT()
{
wScan = EnumLib.ScanCodeShort.KEY_S,
wVk = EnumLib.VirtualKeyShort.KEY_S
}
},
new StructLib.INPUT()
{
type = EnumLib.INPUT_TYPE.INPUT_KEYBOARD,
ki = new StructLib.KEYBDINPUT()
{
wScan = EnumLib.ScanCodeShort.KEY_S,
wVk = EnumLib.VirtualKeyShort.KEY_S,
dwFlags = EnumLib.KEYEVENTF.KEYUP
}
},
new StructLib.INPUT()
{
type = EnumLib.INPUT_TYPE.INPUT_KEYBOARD,
ki = new StructLib.KEYBDINPUT()
{
wScan = EnumLib.ScanCodeShort.KEY_S,
wVk = EnumLib.VirtualKeyShort.KEY_S
}
},
new StructLib.INPUT()
{
type = EnumLib.INPUT_TYPE.INPUT_KEYBOARD,
ki = new StructLib.KEYBDINPUT()
{
wScan = EnumLib.ScanCodeShort.KEY_S,
wVk = EnumLib.VirtualKeyShort.KEY_S,
dwFlags = EnumLib.KEYEVENTF.KEYUP
}
},
new StructLib.INPUT()
{
type = EnumLib.INPUT_TYPE.INPUT_KEYBOARD,
ki = new StructLib.KEYBDINPUT()
{
wScan = EnumLib.ScanCodeShort.KEY_S,
wVk = EnumLib.VirtualKeyShort.KEY_S
}
},
new StructLib.INPUT()
{
type = EnumLib.INPUT_TYPE.INPUT_KEYBOARD,
ki = new StructLib.KEYBDINPUT()
{
wScan = EnumLib.ScanCodeShort.KEY_S,
wVk = EnumLib.VirtualKeyShort.KEY_S,
dwFlags = EnumLib.KEYEVENTF.KEYUP
}
}
};
var hWindow = Api.user32.FindWindow("notepad", null);
Api.user32.SetForegroundWindow(hWindow);
Thread.Sleep(2500);
Api.user32.SendInput((uint)pInputs.Length, pInputs, StructLib.INPUT.Size);
#region powershell yes it WORKS!! begin
[testing.windows]::SetForegroundWindow( ( Get-Process notepad |? { $.id
( get-wmiobject win32process -filter "name='notepad.exe'" |% { if ( $.getowner().user eq $env:username ) { $.processid } } ) } )[0].MainWindowHandle)in
$_inputList = New-Object 'Collections.Generic.List[Testing.Windows3+INPUT]'
$inputList.Add( $( New-Object Testing.Windows3+INPUT Property TYPE]::KEYBOARD ; U = $( New-Object Testing.Windows3+InputUnion -Property { ki = $( New-Object Testing.Windows3+KEYBDINPUT Property @{ wVk = [Testing.Windows3+VirtualKeyShort]::KEY_S } ) } ) } ) ){ type = [Testing.Windows3+INPUT
$inputList.Add( $( New-Object Testing.Windows3+INPUT Property TYPE]::KEYBOARD ; U = $( New-Object Testing.Windows3+InputUnion -Property { ki = $( New-Object Testing.Windows3+KEYBDINPUT Property @{ wVk = [Testing.Windows3+VirtualKeyShort]::KEY_S ; dwFlags = $( [Testing.Windows3+KEYEVENTF]::KEYUP ) } ) } ) } ) ){ type = [Testing.Windows3+INPUT
$inputList.Add( $( New-Object Testing.Windows3+INPUT Property TYPE]::KEYBOARD ; U = $( New-Object Testing.Windows3+InputUnion -Property { ki = $( New-Object Testing.Windows3+KEYBDINPUT Property @{ wVk = [Testing.Windows3+VirtualKeyShort]::MENU } ) } ) } ) ){ type = [Testing.Windows3+INPUT
$inputList.Add( $( New-Object Testing.Windows3+INPUT Property TYPE]::KEYBOARD ; U = $( New-Object Testing.Windows3+InputUnion -Property { ki = $( New-Object Testing.Windows3+KEYBDINPUT Property @{ wVk = [Testing.Windows3+VirtualKeyShort]::KEY_E } ) } ) } ) ){ type = [Testing.Windows3+INPUT
$inputList.Add( $( New-Object Testing.Windows3+INPUT Property TYPE]::KEYBOARD ; U = $( New-Object Testing.Windows3+InputUnion -Property { ki = $( New-Object Testing.Windows3+KEYBDINPUT Property @{ wVk = [Testing.Windows3+VirtualKeyShort]::MENU ; dwFlags = $( [Testing.Windows3+KEYEVENTF]::KEYUP ) } ) } ) } ) ){ type = [Testing.Windows3+INPUT
$inputList.Add( $( New-Object Testing.Windows3+INPUT Property TYPE]::KEYBOARD ; U = $( New-Object Testing.Windows3+InputUnion -Property { ki = $( New-Object Testing.Windows3+KEYBDINPUT Property @{ wVk = [Testing.Windows3+VirtualKeyShort]::KEY_E ; dwFlags = $( [Testing.Windows3+KEYEVENTF]::KEYUP ) } ) } ) } ) ){ type = [Testing.Windows3+INPUT
$inputList.Add( $( New-Object Testing.Windows3+INPUT Property TYPE]::KEYBOARD ; U = $( New-Object Testing.Windows3+InputUnion -Property { ki = $( New-Object Testing.Windows3+KEYBDINPUT Property @{ wVk = [Testing.Windows3+VirtualKeyShort]::CONTROL } ) } ) } ) ){ type = [Testing.Windows3+INPUT
$inputList.Add( $( New-Object Testing.Windows3+INPUT Property TYPE]::KEYBOARD ; U = $( New-Object Testing.Windows3+InputUnion -Property { ki = $( New-Object Testing.Windows3+KEYBDINPUT Property @{ wVk = [Testing.Windows3+VirtualKeyShort]::KEY_F } ) } ) } ) ){ type = [Testing.Windows3+INPUT
$inputList.Add( $( New-Object Testing.Windows3+INPUT Property TYPE]::KEYBOARD ; U = $( New-Object Testing.Windows3+InputUnion -Property { ki = $( New-Object Testing.Windows3+KEYBDINPUT Property @{ wVk = [Testing.Windows3+VirtualKeyShort]::CONTROL ; dwFlags = $( [Testing.Windows3+KEYEVENTF]::KEYUP ) } ) } ) } ) ){ type = [Testing.Windows3+INPUT
$inputList.Add( $( New-Object Testing.Windows3+INPUT Property TYPE]::KEYBOARD ; U = $( New-Object Testing.Windows3+InputUnion -Property { ki = $( New-Object Testing.Windows3+KEYBDINPUT Property @{ wVk = [Testing.Windows3+VirtualKeyShort]::KEY_F ; dwFlags = $( [Testing.Windows3+KEYEVENTF]::KEYUP ) } ) } ) } ) ){ type = [Testing.Windows3+INPUT
$inputArray = $inputList.ToArray()
Start-Sleep 2 ; [Testing.Windows3]::SendInput($inputArray.count, $inputArray, [Runtime.InteropServices.marshal]::SizeOf($_inputArray[0]))
#endregion powershell yes it WORKS!! end
[/code]